package 行为型设计模式.模板方法模式.demo;

/**
 * @Author lf
 * @Date 3/18/2024
 */
public abstract class BeverageMaker {
    // 模板方法，定义了制作饮料的步骤
    public final void prepareBeverage() {
        boilWater();
        brew();
        pourInCup();
        if (customerWantsCondiments()) { // 钩子方法
            addCondiments();
        }
    }

    // 泡制饮料 - 具体实现由子类提供
    abstract void brew();

    // 添加配料 - 具体实现由子类提供
    abstract void addCondiments();

    // 烧开水 - 共同步骤，由基类实现
    void boilWater() {
        System.out.println("Boiling water");
    }

    // 倒入杯中 - 共同步骤，由基类实现
    void pourInCup() {
        System.out.println("Pouring into cup");
    }

    // 钩子方法 - 子类可以选择性地覆写此方法
    boolean customerWantsCondiments() {
        return true; // 默认需要添加配料
    }
}
